Создадим реакцию на его выбор в классе CHTTPServerView
void CHTTPServerView::OnToolsOptions()
{
// TODO: Add your command handler code here
}
Надо создать диалоговое окно и создать для него класс.
Установить кнопочку выбора check box и для неё создать переменную BOOL m_LogFile;. В конструкторе она инициализируется как
CToolsOptios::CToolsOptios(CWnd* pParent /*=NULL*/)
: CDialog(CToolsOptios::IDD, pParent)
{
//{{AFX_DATA_INIT(CToolsOptios)
m_LogFile = FALSE;
//}}AFX_DATA_INIT
}
Заведем стандартную переменную с именем лог файла.
.......... #define PORT_ADDR 80 #define QUEUE_SIZE 25 #define NAMEFILE "FirstStepServer.log" class CSeverWinSock .........И в классе CServerWinSock переменную, которая будет указывать на то, что нужно вести лог файл.
......
class CSeverWinSock
{
public:
BOOL TestLogFile;
void SendData(LPSTR buff);
.........
Начальная инициализация
CSeverWinSock::CSeverWinSock()
{
TestLogFile=FALSE;
}
Организуем вызов диалога, но сначала опишем ссылку на класс.
#include "ToolsOptios.h" ///////////////////////////////////////////////////////////////////////////// // CHTTPServerViewИ вызов диалогового окна.
void CHTTPServerView::OnToolsOptions()
{
CToolsOptios ctopt;
ctopt.m_LogFile=HTTPServer.TestLogFile;
if (ctopt.DoModal()==IDOK) HTTPServer.TestLogFile=ctopt.m_LogFile;
}
Для создания log файла создадим класс CLogFile. Используя этот класс мы и будет писать информацию в файл.
class CLogFile : public CFile
{
public:
BOOL Create();
CString csFileName;
BOOL write(CString writeString);
CLogFile();
virtual ~CLogFile();
};
Подключим его описание к реализации класса CServerWinSock.
// SeverWinSock.h: interface for the CSeverWinSock class.
//
//////////////////////////////////////////////////////////////////////
....................
#include "winsock.h"
# include "LogFile.h"
Обьявим его в классе
....
class CSeverWinSock
{
public:
CLogFile cLogFile;
....
При инициализации в переменную класса CLogFile передаем имя файла
CSeverWinSock::CSeverWinSock()
{
TestLogFile=FALSE;
cLogFile.csFileName=NAMEFILE;
cLogFile.Create();
}
Процедура записи
BOOL CLogFile::write(CString writeString)
{
CFile file(csFileName, CFile::modeNoTruncate | CFile::modeWrite);
file.SeekToEnd();
writeString=writeString+"\r\n";
file.Write(writeString.GetBufferSetLength(writeString.GetLength()),writeString.GetLength());
file.Close();
return TRUE;
}
В проекте есть реализация всех записей в лог на данный момент. Мы постоянно будем расширять количество информации помещаемое в лог файл для изучения соединения и его процесса. Пока там отражаются только самые важные события.
Вот пример пример лог файла
09 : 13 :04 Start WinSock 09 : 13 :04 uuobat 09 : 13 :04 Create Soket 09 : 13 :04 bind 09 : 13 :04 WSAAsyncSelect 09 : 13 :04 Listen 09 : 13 :05 StopServer 09 : 13 :05 Close Socket